#include "ParserString.h"


ParserString::~ParserString() {
}

ParserString::ParserString(string cadena) {
	this->documento.str(cadena);
	this->pos_actual = 0;
}

bool ParserString::hasNext() {
	char letra = 0;
	EnteroLargo tempo;
	bool finPalabra = true;
	string palabra = "";
	string caracteres =
			"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	if (!(this->documento >> std::noskipws >> letra))
		return false;
	do {
		letra = tolower(letra);
		tempo = caracteres.find(letra, 0);

		if (tempo == std::string::npos) {
			finPalabra = false;
		} else {
				palabra.append(1, letra);
		}
	} while (finPalabra && (this->documento >> std::noskipws >> letra));
	if (palabra.length() == 0) {
		return this->hasNext();
	} else {
		this->query = ParseadoQuery(palabra, this->pos_actual);
		this->pos_actual++;
		return true;
	}
}

const ParseadoQuery ParserString::next() {
	return this->query;
}
